home *** CD-ROM | disk | FTP | other *** search
- /*-----------------------------------------------------
- main.c
- TCDLLのAPI、フックプロシージャ
- KAZUBON 1997-1998
- -------------------------------------------------------*/
-
- #include "tcdll.h"
-
- LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);
- void InitClock(HWND hwnd);
-
- /*------------------------------------------------
- 各プロセスで共通のデータ
- --------------------------------------------------*/
- extern HHOOK hhook;
- extern HWND hwndTClockMain;
- extern HWND hwndClock;
-
- /*------------------------------------------------
- Globals
- --------------------------------------------------*/
- extern HANDLE hmod;
- extern WNDPROC oldWndProc;
- extern BOOL bIE4;
- extern HWND hwndStartMenu;
-
- /*------------------------------------------------
- DLLのエントリポイント
- --------------------------------------------------*/
- BOOL WINAPI _DllMainCRTStartup(HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
- {
- hmod = hModule;
- switch (dwFunction)
- {
- case DLL_PROCESS_ATTACH:
- break;
- case DLL_PROCESS_DETACH:
- break;
- default:
- break;
- }
- return TRUE;
- }
-
- /*------------------------------------------------
- API:フックのインストール
- --------------------------------------------------*/
- void WINAPI HookStart(HWND hwndMain)
- {
- HWND hwndTray;
- HANDLE hThread;
-
- hwndTClockMain = hwndMain;
- hwndTray = FindWindow("Shell_TrayWnd", NULL);
- if(!hwndTray) return;
-
- hThread = (HANDLE)GetWindowThreadProcessId(hwndTray, NULL);
- if(!hThread) return;
-
- hhook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, hmod,
- (DWORD)hThread);
-
- //タスクバーの更新
- PostMessage(FindWindow("Shell_TrayWnd", NULL), WM_SIZE,
- SIZE_RESTORED, 0);
- }
-
- /*------------------------------------------------
- API:フックのアンインストール
- --------------------------------------------------*/
- void WINAPI HookEnd(void)
- {
- HWND hwnd;
-
- //時計ウィンドウに終了処理をさせる
- if(hwndClock && IsWindow(hwndClock))
- SendMessage(hwndClock, WM_COMMAND, 102, 0);
- hwndClock = NULL;
- //フックのアンインストール
- if(hhook != NULL)
- UnhookWindowsHookEx(hhook); hhook = NULL;
-
- //タスクバーの更新
- hwnd = FindWindow("Shell_TrayWnd", NULL);
- if(hwnd)
- PostMessage(hwnd, WM_SIZE, SIZE_RESTORED, 0);
- }
-
- /*------------------------------------------------
- フックプロシージャ
- --------------------------------------------------*/
- LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
- {
- LPCWPSTRUCT pcwps;
- char classname[80];
-
- pcwps = (LPCWPSTRUCT)lParam;
-
- if(nCode >= 0 && pcwps && pcwps->hwnd)
- {
- if(hwndClock == NULL &&
- oldWndProc == NULL &&
- GetClassName(pcwps->hwnd, classname, 80) > 0 &&
- lstrcmpi(classname, "TrayClockWClass") == 0)
- {
- // 時計の初期化
- InitClock(pcwps->hwnd);
- }
- /*
- if(bIE4 && hwndClock)
- {
- char s[80];
- GetClassName(pcwps->hwnd, classname, 80);
- wsprintf(s, "%s %X", classname, pcwps->message);
- WriteDebug(s);
- }
- */
-
- }
-
- return CallNextHookEx(hhook, nCode, wParam, lParam);
- }
-
-